Contents

Mailto:

1 Objectives

2 General Comments on the Script

-Instead of an expression of genes, we propose an enrichment score. Which combines the motif score of the TFs and the log10-Pvalue of the motif in the chromatin state. Each Cluster identified represents a group of PEAKS which contain a specific signature of MOTIFS from TFs. - Allow the identification of TFs in the neighborhood Zone. To understand the mechanism of how TFs, cooperate among them. -This Script was used with the Motifs associated with Histone marks. However, it could also be modified to input Motifs associated with ATAC-seq or ChIP-seq. In the case of ATAC-seq, the motifs coming from footprinting analysis or Homer motifs search are highly recommended.

3 Chromatin States defined in the manuscript

4 Set the working environment and Folder to output the results

 workdir = "./"
setwd(workdir)
PTHA1="../03OUTPUT/"
dir.create(PTHA1)
PORT=PTHA1
TRY="_"
TRY1="02Ia_"
PROJECT="03b_TFinZONE_at_14dpci"
PVALUE=0.05
#### FOR VOLCANO ###
upcol<- "#B2182B" # magenta from PiyG
nc<- "#000000" # black
downcol<- "grey" # green from PiyG
CC= c(downcol, "#F7F7F7",upcol)
BASIC_COL="black"
CO3<- c("lightgrey","#B2182B")
CO_ALU3=c("#d7191c","#d8b365","#542788","grey", "#91bfdb", "grey","grey")

NAME33<- c("Mo_Name","Consensus","P-value","Log_P-value","q-value_Benja","Nor_of_Tar","Per_of_Tar","No_of_Tar_Backg","Per_of_Tar_Backg")
NAME34<- c("HOmer_NAME",NAME33)
mat_m<- data.frame("mask_500_FIND")
## Here you write the Path to the 
WORK1="../01DATA_ORI/08MO_onP/"

#WORK1="Y:/002ZF/000FIGURES_ANALY/00GITHUB_01HIS_Chroma_Factors/01HIS_Chrom_Factors_TEST/04MOtifs_Analy_as_SC_MOAC_Fig3_5/02Fig4_MO_MOAC_14dpci/14dATA_ORI/08MOTIFS_on_PEAKS/"
NAME_G2 <-data.frame(list.files(path=WORK1,pattern="*_FIND"))

colnames(NAME_G2)<- "ENH4"
#NAME_G2$GROUP <- gsub("CORR1_14d_", "", NAME_G2$ENH4)
NAME_G2$GROUP <- gsub("*_mask_500_FIND", "", NAME_G2$ENH4)
### this is important to check the SYMBOL
NAME_G22<- data.frame(c("00A_Ia","01Ia_A","02U_Ea","03U_Ia","04U_Pa"))


NAME_G2c<- as.character(t(NAME_G2[,2]))

#WORK11A11="../14dATA_ORI/07aMO_forMOAC/08TSS_Enh_w_14dpci_fHeatmap_ALL.xlsx"
WORK11A11="../01DATA_ORI/07aMO_forSeurat_ANALY/08TSS_Enh_w_14dpci_fHeatmap_ALL.xlsx"


MAT_1A= read_excel(WORK11A11)
#MAT_1A= read.delim(WORK11A11)

colnames(MAT_1A)[1]<- "SYMBOL"

dim(MAT_1A)
## [1] 329  11
##### Set resolution for CLustering
RES=0.5

4.1 Set processors

## sequential:
## - args: function (..., envir = parent.frame())
## - tweaked: FALSE
## - call: NULL
## sequential:
## - args: function (..., workers = 16, envir = parent.frame())
## - tweaked: TRUE
## - call: plan("sequential", workers = 16)

5 Load motifs to make the name in the matrix

5.1 Gather the matrix from all the TFs found in this stage

5.2 Merge TFs Motifs from the 5 GROUPs (00A_Ia, 01Ia_A, 02U_Ea, 03U_Ia, 04U_Pa)

  • Matrix of TFs by Peaks, could be used to merge with other time points
## 
## 00A_Ia_14dcpi 01Ia_A_14dcpi 02U_Ea_14dcpi 03U_Ia_14dcpi 04U_Pa_14dcpi 
##        419729          2370          6786         64905         13643
## [1] 3

5.3 TF Matrix as Single cell analysis matrix

5.4 Create a Seurat object

b7<- AC_RE_VOL_SC_META
rownames(b7)<- b7$PositionID2

mat_c1<- mat_cm_TMM_BOTH_SC[,rownames(b7)]
rownames(mat_c1)<- mat_cm_TMM_BOTH_SC$SYMBOL
dim(mat_c1)
## [1]  217 3746
dim(b7)
## [1] 3746    5
smartseq2 <- CreateSeuratObject(mat_c1,project = "14d", meta.data = b7)

6 Identification of highly variable TFs

## png 
##   2

6.1 Plot from TOP N° of TFs per peaks

arrangeQC_TF <- ggarrange(EC00,EC001, ncol = 2,nrow =1,common.legend = T, align = c("hv"),legend="none")

print(arrangeQC_TF)

6.2 Plot from TOP TFs in the data

grid.arrange(  plot1,plot2, ncol = 1,nrow = 2)

7 Perform normalization and clustering

## Centering and scaling data matrix

7.1 Run the Linear dimensional reduction

## PC_ 1 
## Positive:  Nanog, Hoxa9, Smad3, Tbx5, Hoxa11, Hoxd12, Tgif2, Lhx3, TRPS1, Twist2 
##     PR, Pitx1, GATA3, NeuroG2, DLX2, TCF4, Sox21, Hoxd11, Olig2, Sox3 
##     BHLHA15, BMAL1, LHX9, NPAS, HOXB13, Sox6, Smad4, Smad2, Sox10, Hoxa13 
## Negative:  En1, Hoxd10, Hoxa10, CUX1, LEF1, Ap4, THRb, HNF6, Elk4, Foxh1 
##     Myf5, PRDM10, EBF1, IRF4, ELF1, ZNF467, Unknown, ETS, TCFL2, HOXA2 
##     E2F6, IRF3, E2F3, Gfi1b, IRF2, YY1, Npas4, VDR, RAR, Six4 
## PC_ 2 
## Positive:  GABPA, ERG, Etv2, ETV1, Fli1, ETV4, ETS1, Elf4, EWS, EHF 
##     ELF3, ELF5, Elk1, SPDEF, ELF1, ETS, Elk4, Bcl6, IRF8, Stat3 
##     STAT4, Ap4, RORa, RARa, Hoxa10, STAT1, PPARE, Tbx21, EBF1, En1 
## Negative:  Foxf1, FoxL2, Foxa3, FOXK1, Foxo3, FOXP1, FOXA1, Foxa2, FOXK2, Fox 
##     FOXM1, CDX4, BMAL1, NPAS2, FoxD3, MNT, NPAS, Usf2, Hoxa11, DLX2 
##     Foxo1, Hoxd13, LHX9, CLOCK, Hoxa13, USF1, HOXB13, NFIL3, Hoxd11, MITF 
## PC_ 3 
## Positive:  RARa, Erra, Zac1, THRb, Sox21, Gata4, Sox3, Isl1, Sox2, Sox10 
##     Bapx1, Gata1, Esrrb, PPARa, BMAL1, EAR2, Sox6, MNT, Sox15, Mef2b 
##     TEAD3, Gata2, Gata6, ZNF416, NPAS, Sox9, GATA3, ERRg, Gfi1b, Nanog 
## Negative:  Foxo3, FOXK1, Foxf1, FOXP1, FoxL2, Foxo1, FOXA1, Foxa2, FOXK2, Elk4 
##     ELF1, Elk1, ETS, Foxa3, Npas4, FOXM1, CUX1, Ap4, HNF6, Myf5 
##     Fox, Foxh1, IRF4, FoxD3, Cdx2, Fli1, Hoxd13, IRF3, GABPA, Eomes 
## PC_ 4 
## Positive:  En1, Sox2, Sox15, Hoxd10, FOXM1, THRb, RARa, Sox6, Sox10, FOXA1 
##     Hoxa10, Fox, Sox3, Sox21, Sox17, Foxa2, STAT4, Sox4, FoxL2, Sox7 
##     FOXK2, Erra, Foxa3, Sox9, Isl1, Bcl6, FoxD3, PRDM10, EWS, EBF1 
## Negative:  Atf3, BATF, Fra1, Fos, JunB, Fra2, Atoh1, Twist2, TCF4, BHLHA15 
##     NeuroG2, Npas4, Elk4, Ap4, ELF1, Tcf21, ETS, Elk1, Myf5, CUX1 
##     HNF6, Hoxd13, Foxh1, Cdx2, IRF4, E2F4, IRF3, Olig2, LEF1, MNT 
## PC_ 5 
## Positive:  Fra1, Atf3, Fra2, JunB, Fos, BATF, RARa, En1, FOXM1, Foxa2 
##     FOXA1, Fox, Foxa3, Hoxd10, THRb, Sox2, Sox15, FoxL2, Hoxa10, Sox10 
##     Sox6, Erra, Sox9, Sox17, Sox3, FoxD3, FOXP1, Isl1, FOXK2, Sox7 
## Negative:  CLOCK, Max, bHLHE40, USF1, MNT, BMAL1, NPAS2, NPAS, bHLHE41, Usf2 
##     Elk4, Atoh1, ELF1, MITF, Ap4, Npas4, ETS, Elk1, CUX1, Myf5 
##     TCF4, HNF6, Twist2, NeuroG2, BHLHA15, RUNX1, Tcf21, RUNX, Foxh1, RUNX2

## Plot Pincipal component analysis (PCA)

grid.arrange(  P1, ncol = 1,nrow = 1)

7.2 Plot heatmap from 200 Peaks by Pincipal Component Analysis PCA

print(P2)

## png 
##   2

7.3 Perform Unsupervised Clusters analysis of TFs on peaks

set.seed(1)
smartseq2 <- FindNeighbors(smartseq2, dims = 1:10)
smartseq2 <- FindClusters(smartseq2, resolution = RES, random.seed= 1, algorithm=1)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 3746
## Number of edges: 115000
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8731
## Number of communities: 10
## Elapsed time: 0 seconds

8 Run the dimnsionality reduction by UMAP and T-SNE

CO<-brewer.pal(n = 12, name = "Paired")
COb<-brewer.pal(n = 8, name = "Dark2")
CO2b<-c("#E66100","#000000","#0affc2")
CO2<-c("#b2182b","#ef8a62","#67a9cf")
##EDIT Paired color
COe2<- c("#88CCEE", "#332288","#AA4499", "#44AA99", "#999933", "#882255", "#661100", "#6699CC","#888888","#000000","#77ddcc","#df65b0","#CC79A7","#332288", "#E66100", "#1F78B4", "#B2DF8A", "#33A02C", "#FB9A99", "#A6CEE3", "#FDBF6F", "#FF7F00","#CAB2D6","#F0E442","#B15928","#7570B3","#E7298A","#666666","#c241f8" ,"mediumaquamarine","#882E72",'#1965B0',"#bf812d")
A1<- c('#b2182b','#d6614d','#f4a582')
A2<- c('#8c510a','#bf812d','#F6C141')
A3<- c("#882E72", "#AE76A3","#D1BBD7")
A4<-  c('#01665e','#90C987','#CAE0AB')
A5<- c ('#1965B0','#4393c3',"#92c5de")
CO_ALU2=c("#d7191c","#d8b365","#542788","#abd9e9", "#2c7bb6", "#4d4d4d","grey")
CO_ALU=c("#d7191c","#542788","#d8b365","#abd9e9", "#2c7bb6", "#4d4d4d","grey")
CO_ALU3=c("#d7191c","#d8b365","#542788","grey", "#91bfdb", "grey","grey")
COe<- c(A1,A2,A3,A4,A5)
smartseq2 <-  RunUMAP(smartseq2, dims = 1:30, n.neighbors = 30)
smartseq2 <-  RunTSNE(smartseq2, dims = 1:20, check_duplicates = FALSE)
##### These PLots are printed later in the Script. here are to check #####
#DimPlot(smartseq2, reduction = "umap", label = T,cols = COe2,pt.size=0.7)
#DimPlot(smartseq2, reduction = "tsne", label = T,cols = COe2,pt.size=0.7)

#DimPlot(smartseq2, reduction = "umap",group.by ='GROUP',cols = CO_ALU,pt.size=0.7)
#DimPlot(smartseq2, reduction = "tsne",group.by ='GROUP',cols = COe,pt.size=0.7)

#DimPlot(smartseq2, reduction = "tsne", label = T)
#DimPlot(smartseq2, reduction = "tsne",group.by ='seurat_clusters', split.by = 'GROUP',cols = COe2,pt.size=0.7)
#DimPlot(smartseq2, reduction = "tsne",group.by ='GROUP', split.by = 'seurat_clusters',cols = CO_ALU3,pt.size=0.7)

#DimPlot(smartseq2, reduction = "umap",group.by ='GROUP',cols = CO_ALU3,pt.size=0.7)
#DimPlot(smartseq2, reduction = "tsne",group.by ='GROUP',cols = CO_ALU3,pt.size=0.7)

{pdf(file=paste(PTHA1,"01Umap_tsne_",PROJECT,"CLU_PC10_Dim30",".pdf",sep=""), width=8, height=3)  
P00a<- DimPlot(smartseq2, reduction = "umap", label = T,cols = COe2,pt.size=0.7)
P01a<- DimPlot(smartseq2, reduction = "umap", label = F,cols = COe2,pt.size=0.7)

P00at<- DimPlot(smartseq2, reduction = "tsne", label = T,cols = COe2,pt.size=0.7)
P01at<- DimPlot(smartseq2, reduction = "tsne", label = F,cols = COe2,pt.size=0.7)

P03<-DimPlot(smartseq2, reduction = "umap",group.by ='seurat_clusters', split.by = 'GROUP',cols = COe2,pt.size=0.7)
P03a<-  DimPlot(smartseq2, reduction = "umap",group.by ='GROUP', split.by = 'seurat_clusters',cols = CO_ALU3,pt.size=0.7)

P03t<-DimPlot(smartseq2, reduction = "tsne",group.by ='seurat_clusters', split.by = 'GROUP',cols = COe2,pt.size=0.7)
P03at<-  DimPlot(smartseq2, reduction = "tsne",group.by ='GROUP', split.by = 'seurat_clusters',cols = CO_ALU3,pt.size=0.7)
    
arrange1 <- ggarrange(P00a,P01a, ncol = 2,nrow =1,common.legend = T, align = c("hv"),legend="right")
arrange1t <- ggarrange(P00at,P01at, ncol = 2,nrow =1,common.legend = T, align = c("hv"),legend="right")
arrange1c <- ggarrange(P03, ncol = 1,nrow =1,common.legend = T, align = c("hv"),legend="right")
print(arrange1t)
print(arrange1)
}
dev.off()
## png 
##   2
{pdf(file=paste(PTHA1,"01Umap_tsne_",PROJECT,"CLU_PC10_Dim30_by_STAGE",".pdf",sep=""), width=12, height=3)  
arrange1bt <- ggarrange(P03t, ncol = 1,nrow =1,common.legend = T, align = c("hv"),legend="right")
arrange1ca <- ggarrange(P03a, ncol = 1,nrow =1,common.legend = T, align = c("hv"),legend="right")
arrange1cat <- ggarrange(P03at, ncol = 1,nrow =1,common.legend = T, align = c("hv"),legend="right")

print(arrange1bt)
print(arrange1c)
print(arrange1cat)
}
dev.off()
## png 
##   2

8.1 Plot UMAP and TSNE by Clusters

print(arrange1t)

print(arrange1)

print(arrange1bt)

print(arrange1c)

print(arrange1cat)

## png 
##   2

8.2 Plot UMAP and TSNE by GROUP

print(arrange3)

print(arrange3t)

print(arrange2)

9 Find top TFs for every Neighborhood ZONE

9.1 Barplot across the Neighborhood by GROUP

grid.arrange(  P20,P201, ncol = 1,nrow = 2)

9.2 Heatmap of the top 10 markers per neighborhood after the Likelihood-ratio test

grid.arrange(  P05ah_bino1, ncol = 1,nrow = 1)

grid.arrange(  P05ah_bino, ncol = 1,nrow = 1)

10 Handeling of the Seurat Object after Analysis

##Save Seurat Object - Important for further modification of the Plots. You do not need to start from the start of the script.

10.1 Extract analized matrix from Seurat objects

DATA_SC<- data.frame(smartseq2@assays[["RNA"]]@counts@i)
DATA_SC<- data.frame(smartseq2@assays[["RNA"]]@counts@i)
DATA_SC<- GetAssay(smartseq2,assay = "RNA")
DATA_SC1<- data.frame(DATA_SC@scale.data)
DATA_SC2<- data.frame(DATA_SC@scale.data)
#dim(DATA_SC1)
META_SEU<- data.frame(smartseq2@meta.data)
colnames(DATA_SC1)<- META_SEU$PositionID
colnames(META_SEU)[4]<- "SYMBOL_TF"

10.2 Selection of candidate genes from 04dpci marker list. This is performed after checking the output excel file

GENES001<- c("Twist2","Smad4", "Nanog","Smad2","Fos","Sox9","Sox10","JunB")
GENES002 <- c("Pitx1","Isl1",  "Mef2b","FOXA1","TEAD3","GATA3", "Gata6", "Mef2b")
GENES003 <- c("Eomes","Oct4","Foxh1","CUX1","Bapx1", "Elk4","Foxo1","Fli1")
GENES004<- c("Rbp7","Rgcc", "Fabp4","Egfl7","Flt1", "Cd36","Nrp1","Tpm1", "Rbp1")

11 Code to perform Violin plots of selected TFs

LE=10
SI=10
YL3="Norm binding of TFs"
XL3="clusters"
P1 <- VlnPlot(smartseq2, GENES001, stack = TRUE, sort = F, flip = T,pt.size=0.02)+geom_point(size = .4,colour = "darkgrey") +scale_fill_manual(values = COe2)+
  theme(legend.position = "none",plot.title= element_text(color=BASIC_COL, size=LE, face="bold"), axis.text.y= element_text(size=LE,face="bold"),axis.text.x = element_text(size=SI, face="bold"), axis.title.x =element_text(color=BASIC_COL, size=LE, face="bold"), axis.title.y = element_text(color=BASIC_COL, size=LE, face="bold")) +labs(title=paste(PROJECT, "SEVERAL_TFs",sep="" ) , x=XL3, y = YL3)


P1CM <- VlnPlot(smartseq2, GENES002, stack = TRUE, sort = F, flip = T,pt.size=0.02)+geom_point(size = .4,colour = "darkgrey") +scale_fill_manual(values = COe2)+
  theme(legend.position = "none",plot.title= element_text(color=BASIC_COL, size=LE, face="bold"), axis.text.y= element_text(size=LE,face="bold"),axis.text.x = element_text(size=SI, face="bold"), axis.title.x =element_text(color=BASIC_COL, size=LE, face="bold"), axis.title.y = element_text(color=BASIC_COL, size=LE, face="bold")) +labs(title=paste(PROJECT, "SEVERAL_TFs",sep="" ) , x=XL3, y = YL3)

P1CM3 <- VlnPlot(smartseq2, GENES003, stack = TRUE, sort = F, flip = T,pt.size=0.02)+geom_point(size = .4,colour = "darkgrey") +scale_fill_manual(values = COe2)+
  theme(legend.position = "none",plot.title= element_text(color=BASIC_COL, size=LE, face="bold"), axis.text.y= element_text(size=LE,face="bold"),axis.text.x = element_text(size=SI, face="bold"), axis.title.x =element_text(color=BASIC_COL, size=LE, face="bold"), axis.title.y = element_text(color=BASIC_COL, size=LE, face="bold")) +labs(title=paste(PROJECT, "SEVERAL_TFs",sep="" ) , x=XL3, y = YL3)
#P1CM3
#print(P1CM)

pdf(file=paste(PTHA1,"09_", PROJECT,"_CLU_vs_Ex_VIol_groups_STACKED",".pdf",sep=""), width=10, height=15)
 print(P1)
arrange1CM <- ggarrange(P1CM, ncol = 1,nrow =1,common.legend = T, align = c("hv"),legend="top")
arrange1CM3 <- ggarrange(P1CM3, ncol = 1,nrow =1,common.legend = T, align = c("hv"),legend="top")
dev.off()
## png 
##   2

11.3 VIolin plot splited by seurat Neighborhood Cluster

  • Plot in group to give an Overview of the TF across the Clusters
  • Alternative Violin plot of each TF in a plot (Optional to perform)
print(arrange12)

print(P04b12)

print(P04c12)

# Code for UMAP and TSNE plots

#FeaturePlot(smartseq2, features =GENES001,min.cutoff=0,max.cutoff=1,cols = CO3)
P05a<-FeaturePlot(smartseq2, features =GENES001,min.cutoff=0,max.cutoff=1,cols = CO3)
P05b<-FeaturePlot(smartseq2, features =GENES002,min.cutoff=0,max.cutoff=1,cols = CO3)
P05c<-FeaturePlot(smartseq2, features =GENES003,min.cutoff=0,max.cutoff=1,cols = CO3)

{pdf(file=paste(PTHA1,"09_",PROJECT,"_CLU_vs_Exp_UMMAP_groups",".pdf",sep=""),width=8, height=6)  
print(P05a)
print(P05b)
print(P05c)
}
dev.off()
## png 
##   2
P05a1<-FeaturePlot(smartseq2, features =GENES001,min.cutoff=0,max.cutoff=1,cols = CO3,reduction="tsne")
P05b1<-FeaturePlot(smartseq2, features =GENES002,min.cutoff=0,max.cutoff=1,cols = CO3,reduction="tsne")
P05c1<-FeaturePlot(smartseq2, features =GENES003,min.cutoff=0,max.cutoff=1,cols = CO3,reduction="tsne")

{pdf(file=paste(PTHA1,"09_",PROJECT,"_CLU_vs_Ex_TSNE_groups",".pdf",sep=""),width=8, height=6)  
print(P05a1)
print(P05b1)
print(P05c1)
}
dev.off()
## png 
##   2

12 Dimentional reduction plot for each selected TFs

12.1 UMAP plot

print(P05a)

print(P05b)

print(P05c)

12.2 TSNE plot

print(P05a1)

print(P05b1)

print(P05c1)

13 SessionInfo

sessionInfo()
## R version 4.3.0 (2023-04-21 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=German_Germany.utf8  LC_CTYPE=German_Germany.utf8   
## [3] LC_MONETARY=German_Germany.utf8 LC_NUMERIC=C                   
## [5] LC_TIME=German_Germany.utf8    
## 
## time zone: Europe/Berlin
## tzcode source: internal
## 
## attached base packages:
##  [1] stats4    splines   grid      parallel  stats     graphics  grDevices
##  [8] utils     datasets  methods   base     
## 
## other attached packages:
##  [1] future_1.33.0               readxl_1.4.2               
##  [3] dplyr_1.1.2                 stringr_1.5.0              
##  [5] khroma_1.10.0               tidyr_1.3.0                
##  [7] EnrichedHeatmap_1.30.0      gplots_3.1.3               
##  [9] plyr_1.8.8                  org.Mm.eg.db_3.17.0        
## [11] AnnotationDbi_1.62.2        SeuratObject_4.1.3         
## [13] Seurat_4.3.0.1              clusterProfiler_4.8.1      
## [15] Rcpp_1.0.10                 RColorBrewer_1.1-3         
## [17] DESeq2_1.40.2               SummarizedExperiment_1.30.2
## [19] Biobase_2.60.0              MatrixGenerics_1.12.2      
## [21] matrixStats_1.0.0           GenomicRanges_1.52.0       
## [23] GenomeInfoDb_1.36.1         IRanges_2.34.1             
## [25] S4Vectors_0.38.1            BiocGenerics_0.46.0        
## [27] RcppArmadillo_0.12.4.1.0    gam_1.22-2                 
## [29] BiocParallel_1.34.2         circlize_0.4.15            
## [31] ComplexHeatmap_2.16.0       doParallel_1.0.17          
## [33] iterators_1.0.14            foreach_1.5.2              
## [35] ggpubr_0.6.0                ggplot2_3.4.2              
## [37] edgeR_3.42.4                limma_3.56.2               
## [39] gridExtra_2.3               data.table_1.14.8          
## [41] openxlsx_4.2.5.2            knitr_1.43                 
## [43] BiocStyle_2.28.0           
## 
## loaded via a namespace (and not attached):
##   [1] spatstat.sparse_3.0-2   bitops_1.0-7            enrichplot_1.20.0      
##   [4] HDO.db_0.99.1           httr_1.4.6              tools_4.3.0            
##   [7] sctransform_0.3.5       backports_1.4.1         utf8_1.2.3             
##  [10] R6_2.5.1                uwot_0.1.15             lazyeval_0.2.2         
##  [13] GetoptLong_1.0.5        withr_2.5.0             sp_2.0-0               
##  [16] progressr_0.13.0        cli_3.6.1               spatstat.explore_3.2-1 
##  [19] scatterpie_0.2.1        labeling_0.4.2          sass_0.4.6             
##  [22] spatstat.data_3.0-1     ggridges_0.5.4          pbapply_1.7-2          
##  [25] yulab.utils_0.0.6       gson_0.1.0              DOSE_3.26.1            
##  [28] parallelly_1.36.0       rstudioapi_0.14         RSQLite_2.3.1          
##  [31] generics_0.1.3          gridGraphics_0.5-1      shape_1.4.6            
##  [34] gtools_3.9.4            spatstat.random_3.1-5   ica_1.0-3              
##  [37] car_3.1-2               zip_2.3.0               GO.db_3.17.0           
##  [40] Matrix_1.5-4.1          ggbeeswarm_0.7.2        fansi_1.0.4            
##  [43] abind_1.4-5             lifecycle_1.0.3         yaml_2.3.7             
##  [46] carData_3.0-5           qvalue_2.32.0           Rtsne_0.16             
##  [49] blob_1.2.4              promises_1.2.0.1        crayon_1.5.2           
##  [52] miniUI_0.1.1.1          lattice_0.21-8          cowplot_1.1.1          
##  [55] KEGGREST_1.40.0         magick_2.7.4            pillar_1.9.0           
##  [58] fgsea_1.26.0            rjson_0.2.21            future.apply_1.11.0    
##  [61] codetools_0.2-19        fastmatch_1.1-3         leiden_0.4.3           
##  [64] glue_1.6.2              downloader_0.4          ggfun_0.1.1            
##  [67] vctrs_0.6.3             png_0.1-8               treeio_1.24.1          
##  [70] cellranger_1.1.0        gtable_0.3.3            cachem_1.0.8           
##  [73] xfun_0.39               S4Arrays_1.0.4          mime_0.12              
##  [76] tidygraph_1.2.3         survival_3.5-5          ellipsis_0.3.2         
##  [79] fitdistrplus_1.1-11     ROCR_1.0-11             nlme_3.1-162           
##  [82] ggtree_3.8.0            bit64_4.0.5             RcppAnnoy_0.0.20       
##  [85] bslib_0.5.0             irlba_2.3.5.1           vipor_0.4.5            
##  [88] KernSmooth_2.23-21      colorspace_2.1-0        DBI_1.1.3              
##  [91] ggrastr_1.0.2           tidyselect_1.2.0        bit_4.0.5              
##  [94] compiler_4.3.0          DelayedArray_0.26.6     plotly_4.10.2          
##  [97] bookdown_0.34           shadowtext_0.1.2        caTools_1.18.2         
## [100] scales_1.2.1            lmtest_0.9-40           goftest_1.2-3          
## [103] digest_0.6.31           spatstat.utils_3.0-3    rmarkdown_2.23         
## [106] XVector_0.40.0          htmltools_0.5.5         pkgconfig_2.0.3        
## [109] highr_0.10              fastmap_1.1.1           rlang_1.1.1            
## [112] GlobalOptions_0.1.2     htmlwidgets_1.6.2       shiny_1.7.4            
## [115] farver_2.1.1            jquerylib_0.1.4         zoo_1.8-12             
## [118] jsonlite_1.8.5          GOSemSim_2.26.0         RCurl_1.98-1.12        
## [121] magrittr_2.0.3          GenomeInfoDbData_1.2.10 ggplotify_0.1.1        
## [124] patchwork_1.1.2         munsell_0.5.0           ape_5.7-1              
## [127] viridis_0.6.3           reticulate_1.30         stringi_1.7.12         
## [130] ggraph_2.1.0            zlibbioc_1.46.0         MASS_7.3-60            
## [133] listenv_0.9.0           ggrepel_0.9.3           deldir_1.0-9           
## [136] Biostrings_2.68.1       graphlayouts_1.0.0      tensor_1.5             
## [139] locfit_1.5-9.8          igraph_1.5.0            spatstat.geom_3.2-1    
## [142] ggsignif_0.6.4          reshape2_1.4.4          evaluate_0.21          
## [145] BiocManager_1.30.21     tweenr_2.0.2            httpuv_1.6.11          
## [148] RANN_2.6.1              purrr_1.0.1             polyclip_1.10-4        
## [151] clue_0.3-64             scattermore_1.2         ggforce_0.4.1          
## [154] broom_1.0.5             xtable_1.8-4            tidytree_0.4.2         
## [157] rstatix_0.7.2           later_1.3.1             viridisLite_0.4.2      
## [160] tibble_3.2.1            aplot_0.1.10            beeswarm_0.4.0         
## [163] memoise_2.0.1           cluster_2.1.4           globals_0.16.2